import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateObject } from 'ai';
import { z } from 'zod';
import { NextRequest, NextResponse } from 'next/server';

// 这是一个模拟的菜品列表，实际应用中应该使用真实的AI识别


// 创建 OpenRouter AI 提供者实例
const openRouter = createOpenAICompatible({
  name: 'openrouter',
  baseURL: 'https://openrouter.ai/api/v1',
  apiKey: process.env.OPENROUTER_API_KEY, // 从环境变量获取API密钥
});

// 定义菜品识别结果的数据结构
const dishRecognitionSchema = z.object({
  recognition: z.object({
    dishes: z.array(z.object({
      name: z.string(),
      confidence: z.number().optional(),
      description: z.string().optional()
    })),
    cuisine_style: z.string().optional(),
    additional_notes: z.string().optional()
  })
});

export async function POST(request: NextRequest) {
  // 检查API密钥是否存在
  if (!process.env.OPENROUTER_API_KEY) {
    return NextResponse.json(
      { error: 'OPENROUTER_API_KEY 环境变量未配置' },
      { status: 500 }
    );
  }

  try {
    // 获取并处理上传的图片
    const formData = await request.formData();
    const imageFile = formData.get('image') as File;

    if (!imageFile) {
      return NextResponse.json(
        { error: '未找到图片文件' },
        { status: 400 }
      );
    }

    // 将图片转换为base64
    const imageBuffer = await imageFile.arrayBuffer();
    const base64Image = Buffer.from(imageBuffer).toString('base64');
    const dataUrl = `data:${imageFile.type};base64,${base64Image}`;

    // 使用 generateObject 识别菜品
    const { object } = await generateObject({
      model: openRouter('openai/gpt-4o-2024-11-20'),
      schema: dishRecognitionSchema,
      prompt: `请识别这张图片中的菜品。这是一张食物照片，请详细分析并识别出所有可能的菜品名称。图片数据: ${dataUrl}`,
      temperature: 0.2,
    });
    console.log("AI 识别结果:", object);

    // 提取菜品名称列表
    const dishNames = object.recognition.dishes.map(dish => dish.name);

    return NextResponse.json({
      dishes: dishNames,
      details: object.recognition,
      success: true
    });
  } catch (error) {
    console.error('完整错误详情:', error);
    const errorDetails = {
      error: '处理请求时出错',
      details: '未知错误详情',
      stack: ''
    };
    if (error instanceof Error) {
      errorDetails.details = error.message;
      errorDetails.stack = error.stack || '';
      // 尝试获取状态码（如果是API错误）
      const statusCode = (error as any).statusCode || 500;
      return NextResponse.json(
        {
          ...errorDetails,
          statusCode
        },
        { status: statusCode }
      );
    }
    return NextResponse.json(
      errorDetails,
      { status: 500 }
    );
  }
}

